package Offer5907;

import java.util.HashMap;
import java.util.Map;

/**
 * 下一个更大的数值平衡数
 * 如果整数  x 满足：对于每个数位 d ，这个数位 恰好 在 x 中出现 d 次。那么整数 x 就是一个 数值平衡数 。
 * 给你一个整数 n ，请你返回 严格大于 n 的 最小数值平衡数 。
 *
 * @author 23737
 * @time 2021.10.24
 */
public class Test {
    public static void main(String[] args) {
        System.out.println(new Solution().nextBeautifulNumber(1));
    }
}

/**
 * 使用哈希表来进行存储
 * 自己写的，双一百！！！！！
 */
class Solution {
    public int nextBeautifulNumber(int n) {
        int number = n;
        for (int i = n+1; i < Integer.MAX_VALUE; i++) {
            if (check(i)) {
                number = i;
                break;
            }
        }
        return number;
    }

    private boolean check(int i) {
        boolean flag = false;
        Map<Integer, Integer> map = new HashMap<>();
        //a用来计算每个数位上的数
        int a = i;
        //b用来拿到最后一位的数
        int b = 0;
        while (a != 0) {
            b = a % 10;
            if (map.get(b) == null){
                map.put(b, 1);
            }else {
                map.put(b, map.get(b)+1);
            }
            a = a / 10;
        }
        int size = map.size();
        int count = 0;
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
//            System.out.println(entry.getKey()+"------>"+ entry.getValue());
            if (entry.getKey() == entry.getValue()) {
                count++;
                if (count == size){
                    flag = true;
                }
            }else {
                flag = false;
            }
        }
//        System.out.println(flag);
        return flag;
    }
}